package model

import (
	"gorm.io/gorm"
	"time"
)

type DataBank struct {
	ID                int64  `json:"id" gorm:"id"`
	FtpInfoId         int64  `json:"ftp_info_id" gorm:"ftp_info_id"`               // ftp_info_id
	Date              string `json:"date" gorm:"date"`                             // 日期
	Time              string `json:"time" gorm:"time"`                             // 时间
	LogTime           int64  `json:"log_time" gorm:"log_time"`                     // log_time
	SteamId           string `json:"steam_id" gorm:"steam_id"`                     // 时间
	GameId            string `json:"game_id" gorm:"game_id"`                       // 游戏id
	GameName          string `json:"game_name" gorm:"game_name"`                   // 游戏名称
	EventType         string `json:"event_type" gorm:"event_type"`                 // 操作类型
	Balance           string `json:"balance" gorm:"balance"`                       // 余额
	TransactionAmount string `json:"transaction_amount" gorm:"transaction_amount"` // 用户操作金额  存款  取款 转账 购卡等
	ProcessedAmount   string `json:"processed_amount" gorm:"processed_amount"`     // 处理金额  用户操作后实际处理的金额
	AccountCardNum    string `json:"account_card_num" gorm:"account_card_num"`     // 操作的卡号
	AccountGameId     string `json:"account_game_id" gorm:"account_game_id"`       // 操作所属用户id
	AccountGameName   string `json:"account_game_name" gorm:"account_game_name"`   // 操作所属用户名称
	TransferCardNum   string `json:"transfer_card_num" gorm:"transfer_card_num"`   // 转账卡号
	TransferGameId    string `json:"transfer_game_id" gorm:"transfer_game_id"`     // 转账用户游戏id
	TransferGameName  string `json:"transfer_game_name" gorm:"transfer_game_name"` // 转账用户名
	Content           string `json:"content" gorm:"content"`                       // 描述
	Location          string `json:"location" gorm:"location"`                     // 锁所在位置
	UpdatedAt         int64  `json:"updated_at" gorm:"updated_at"`                 // 修改时间
	CreatedAt         int64  `json:"created_at" gorm:"created_at"`                 // 添加时间
}

func (DataBank) TableName() string {
	return "sm_data_bank"
}

func (u DataBank) BeforeUpdate(tx *gorm.DB) (err error) {
	now := time.Now()
	unixTime := now.Unix()
	u.UpdatedAt = unixTime
	u.CreatedAt = unixTime
	return nil
}

type DataBankM struct {
	DB *gorm.DB
}

func NewDataBankM() *DataBankM {
	return &DataBankM{
		GetDB(),
	}
}

func (c *DataBankM) InsertDataBank(DataArr []DataBank) bool {

	result := c.DB.Omit("id").CreateInBatches(DataArr, 1000)

	if result.Error != nil {
		panic(result.Error)
	}
	return true
}

// 获取用户交易数据
func (p *DataBankM) GetUserBankData(ftpInfoId int64) []DataBank {
	var data []DataBank
	// 其他类型数据太难处理 后期再说

	query := p.DB.Model(DataBank{}).Select("steam_id, max(id) as id").Where("ftp_info_id = ? and  event_type = ?", ftpInfoId, "purchased").Group("steam_id")

	result := p.DB.Debug().Model(DataBank{}).Joins("join (?) q on sm_data_bank.id = q.id", query).Find(&data)
	if result.Error != nil {
		panic(result.Error)
	}

	return data
}
